home *** CD-ROM | disk | FTP | other *** search
/ Flash MX Savvy / FlashMX Savvy.iso / pc / MAC / Amapi3D / Amapi3DTrial_Edition / 3SPACE / CameraDollyBehavior.js < prev    next >
Encoding:
Text File  |  2001-02-20  |  2.5 KB  |  86 lines  |  [AMAS/AMAP]

  1. // -* CameraDollyBehavior.js *-
  2. //
  3. // Name: CameraDolly behavior
  4. // Description: 
  5. // Author:
  6. // Version: $Id: CameraDollyBehavior.js,v 1.6 2000/12/29 10:12:14 consumer Exp $
  7. //
  8.  
  9. // Keep an array of the solids using this behavior
  10. var dollyCameras = new Array(1);
  11.  
  12. function CameraDollyBehavior(camera, targetSolid, intensity)
  13. {
  14.   // Member methods of the behavior
  15.   this.start = CameraDollyBehaviorStart;
  16.   this.stop = CameraDollyBehaviorStop;
  17.  
  18.   this.camera = camera;
  19.   this.targetSolid = targetSolid;
  20.  
  21.   // The intensity of the drag force must be proportional to the size
  22.   // of the solid. The factor 3 is arbitrary.
  23.   this.intensity = intensity * TSSolidGetMaxLength(targetSolid) * 3;
  24.  
  25.   this.initialTargetPoint = TSCameraGetTargetPosition(camera);
  26.   this.initialPosition = TSCameraGetPosition(camera);
  27.  
  28.   this.dragID = TSMakeUniqID("DragForce_" + camera);
  29.   TSMakeDragForce(this.dragID, this.intensity, "0 0 0",
  30.                   TSMakeStringFromPoint(TSSolidGetPosition(camera)));
  31.  
  32.   this.dampID = TSMakeUniqID("DampingForce_" + camera);
  33.   TSMakeDampingSolidForce(this.dampID, "1", "1");
  34.  
  35.   TSAppendChild(camera, this.dragID);
  36.   TSAppendChild(camera, this.dampID);
  37.  
  38.   TSUpdateNode(camera);
  39.  
  40.   // Free the camera
  41.   TSUpdateNodeAttribute(camera, 'fixed', '0');
  42. }
  43.  
  44. function CameraDollyBehaviorStart(percent)
  45. {
  46.   var cameraPosition = TSCameraGetPosition(this.camera);
  47.   var targetPosition = TSSolidGetPosition(this.targetSolid);
  48.   var dragPosition = TSPointInterpolate(cameraPosition, targetPosition, percent);
  49.  
  50.   TSCameraLookAtSolid(this.camera, this.targetSolid);
  51.   TSUpdateNodeAttribute(this.dragID, "targetPoint", TSMakeStringFromPoint(dragPosition));
  52. }
  53.  
  54. function CameraDollyBehaviorStop()
  55. {
  56.   TSCameraLookAt(this.camera, this.initialTargetPoint);
  57.   TSUpdateNodeAttribute(this.dragID, "targetPoint", TSMakeStringFromPoint(this.initialPosition));
  58. }
  59.  
  60. //
  61. // Event functions
  62. //
  63.  
  64. function CameraDollyBehaviorStartEvent(obj, event)
  65. {
  66.   var camera = TSGetExtraParam(event, 'camera');
  67.   var targetSolid = TSGetExtraParam(event, 'targetSolid');
  68.   var percent = TSGetExtraParam(event, 'percent');
  69.   var speed = TSGetExtraParam(event, 'speed');
  70.  
  71.   if (dollyCameras[camera] == null) {
  72.     if (targetSolid == "")
  73.       dollyCameras[camera] = new CameraDollyBehavior(camera, obj, parseFloat(speed));
  74.     else
  75.       dollyCameras[camera] = new CameraDollyBehavior(camera, targetSolid, parseFloat(speed));
  76.   }
  77.  
  78.   dollyCameras[camera].start(percent);
  79. }
  80.  
  81. function CameraDollyBehaviorStopEvent(obj, event)
  82. {
  83.   var camera = TSGetExtraParam(event, 'camera');
  84.   dollyCameras[camera].stop();
  85. }
  86.